package br.iesb.main;

import java.util.Random;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

import br.iesb.bean.Jogador;
import br.iesb.bean.Posicao;
import br.iesb.bean.Tabuleiro;
import br.iesb.bean.boat.ETipoArquivo;
import br.iesb.exporter.FileExporter;
import br.iesb.importer.JSONImporter;
import br.iesb.importer.XMLImporter;
import br.iesb.util.XMLFileFilter;

public class Main {

	public static void main(String[] args) {
		
		String options[] = {"Exportar execução automática", "Importar arquivo salvo anteriormente"};
		int retorno = JOptionPane.showOptionDialog(null, "O que deseja fazer agora?", "Batalha Naval", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, null);
		
		if (retorno == JOptionPane.CLOSED_OPTION) {
			JOptionPane.showMessageDialog(null, "Execução cancelada pelo usuário!", "Alerta", JOptionPane.ERROR_MESSAGE);
			return;
		}
		
		if (retorno == 0) {//exportar
			Tabuleiro t = new Tabuleiro();
			Jogador player01 = new Jogador();
			Random random = new Random();
			for (int i=0; i<16; i++) {
				Posicao p = new Posicao(random.nextInt(t.getQtLinhas()), random.nextInt(t.getQtColunas()));
				player01.tiro(p, t);
			}
			random = null;
			
			options = new String[]{"XML","JSON"};
			retorno = JOptionPane.showOptionDialog(null, "Exportar qual tipo de arquivo?", "Exportar", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, null);
			
			if (retorno == JOptionPane.CLOSED_OPTION) {
				JOptionPane.showMessageDialog(null, "Execução cancelada pelo usuário!", "Alerta", JOptionPane.ERROR_MESSAGE);
				return;
			}
			FileExporter exporter = new FileExporter();
			if (retorno == 0) {
				exporter.doExportToFile(t,ETipoArquivo.XML);
			}else {
				exporter.doExportToFile(t,ETipoArquivo.JSON);
			}
		}else { //importar
			options = new String[]{"XML","JSON"};
			retorno = JOptionPane.showOptionDialog(null, "Exportar qual tipo de arquivo?", "Exportar", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, null);
			if (retorno == JOptionPane.CLOSED_OPTION) {
				JOptionPane.showMessageDialog(null, "Execução cancelada pelo usuário!", "Alerta", JOptionPane.ERROR_MESSAGE);
				return;
			}
			if (retorno == 0) { //xml
				JOptionPane.showMessageDialog(null, "Agora informe o arquivo XML que deseja importar", "Importar", JOptionPane.INFORMATION_MESSAGE);
				
				JFileChooser chooser = new JFileChooser();
				chooser.setFileFilter(new XMLFileFilter());
				chooser.setMultiSelectionEnabled(false);
				chooser.setApproveButtonText("Abrir");
				chooser.setDialogTitle("Escolher arquivo para importar");
				
				if (JFileChooser.APPROVE_OPTION == chooser.showOpenDialog(null)) {
					
					XMLImporter xmlImporter = new XMLImporter();
					Tabuleiro t = xmlImporter.importar(chooser.getSelectedFile());
					
					JOptionPane.showMessageDialog(null, t.desenharTabuleiro(), "Estado do tabuleiro", JOptionPane.INFORMATION_MESSAGE);
				}else {
					JOptionPane.showMessageDialog(null, "Execução cancelada pelo usuário!", "Alerta", JOptionPane.ERROR_MESSAGE);
					return;
				}
				
			}else {//json
				JSONImporter importer = new JSONImporter();
				Tabuleiro t = importer.loadFromJSON();
				
				JOptionPane.showMessageDialog(null, t.desenharTabuleiro(), "Estado do tabuleiro", JOptionPane.INFORMATION_MESSAGE);
			}
		}
	}

}
